<?php

namespace App\Trip\Train\Order\Interfaces;

use App\Models\Train\TrainOrderPassengers\TrainOrderPassenger;
use App\Models\Train\TrainOrders\TrainOrder;
use Exception;

interface OrderPassengerRefundInterface
{
    public function getOrderInfo(): TrainOrder;

    public function getPassenger(): TrainOrderPassenger;

    /**
     * 获取理论退款金额 ， 如果 小于0 则需要支付， 如果 = 0 调用 订单出票服务商 退票退款接口
     * 不退的金额 票损 + 退票手续费 + 购票服务费
     *
     * @return float
     * @throws Exception
     */
    public function getShouldRefundAmount(): float;

    public function getShouldPayAmount(): float;

    /**
     * 退票服务费
     *
     * @return float
     */
    public function getRefundServiceAmount(): float;

    /**
     * 应退价
     *
     * @return float
     */
    public function ticketRefundAmount(): float;

    /**
     * 票损
     *
     * @return float
     */
    public function ticketLossAmount(): float;

    /**
     * 获取选座费用
     *
     * @return float
     */
    public function getSelectedSeatAmount(): float;

    public function isIgnoreWorkTimeError(): bool;

    public function setIgnoreWorkTimeError();


}